\chapter{Plan}
In conjuction with the guidence notes given with the assignment we plan to divide the task into the sections below.

\section{Functional Testing}
For each configuration carry out functional tests to identify and quantify the following:
\begin{itemize}
\item memory leaks;
\item run-time exceptions.
\end{itemize}
From this testing we may also get some baseline measurements to feed into performance testing.

\section{Performance Testing}
Firstly we will define acceptable performance for the application in the form of a set of key performance scenarios. We will then carry out load testing to quantify the application performance under a range of loads. Following this stress testing will identify upper bounds for the application i.e. the maximum load within acceptable performance or to failure. We will profile performance by measuring standard system metrics: CPU activity; memory usage (both garbage collection performance and native memory utilisation); and network load. Client side metrics will also be measured including throughput, and response time. To carry out these tests we will use automated performance testing tools.

\section{Optimising Performance}
Following analysis of bottle necks from the performance testing we will attempt to improve performance and quantify the improvement made by tuning the following parameters:
\begin{itemize}
 \item Java Virtual Machine (JVM);
 \item JBoss application server settings;
 \item Operating sytem settings.
\end{itemize}

We will assess the impact of optimisations individually and also in combination, culminating in a suggested optimal configuration for our key performance scenarios.

\section{Modelling and Simulation}
We will use the parameters we measured in the preceeding sections to construct a model of some of the application configurations. We will use our model to explain the results we observed and explain some of the more unexpected results. The model should reflect the real performance metrics observed for a range of users.

We will formulate a theoretical model to explain the results we observed, this will use queuing theory models. If time allows we will also obtain alternative analysis with another method such as Petri Nets.
